package top.malaoshi.web.utils;

import top.malaoshi.util.StringUtil;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * 判断是否静态文件、静态目录
 */
public class StaticFileAndDirectory {
    private static List<String> staticDirectory =new ArrayList();
    static {
        staticDirectory.add("/js/");
        staticDirectory.add("/css/");
        staticDirectory.add("/img/");
        staticDirectory.add("/static/");
    }

    private static List<String> staticFileSuffix =new ArrayList();
    static {
        staticFileSuffix.add(".html");
        staticFileSuffix.add(".htm");
        staticFileSuffix.add(".css");
        staticFileSuffix.add(".js");
        staticFileSuffix.add(".jpg");
        staticFileSuffix.add(".jpeg");
        staticFileSuffix.add(".gif");
        staticFileSuffix.add(".png");
        staticFileSuffix.add(".ico");
        staticFileSuffix.add(".txt");
        staticFileSuffix.add(".doc");
        staticFileSuffix.add(".docx");
        staticFileSuffix.add(".xls");
        staticFileSuffix.add(".xlsx");
        staticFileSuffix.add(".ppt");
        staticFileSuffix.add(".pptx");
        staticFileSuffix.add(".mp3");
        staticFileSuffix.add(".mp4");
        staticFileSuffix.add(".exe");
    }

    public static boolean isStaticDirectory(String url){

        for (String path: staticDirectory) {
            if(url.indexOf(path)>=0) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断是否静态文件
     * 如果url中最后一个部分中，包含 “.” ，那么截取后缀，与 staticFileSuffix 比较
     * @param url
     * @return
     */
    public static boolean isStaticFile(String url){
        // "/abc.a/student.txt
        String name = StringUtil.lastSlice(url, "/", false);
        if(name.contains(".")) { // 有 '.' ，说明有后缀，需要判断后缀
            String suffix = StringUtil.lastSlice(name, ".", true);
            boolean ret = staticFileSuffix.contains(suffix);
            return ret;
        }else { // 没有 '.'，说明没有后缀，就认为不是静态文件
            return false;
        }
    }

    public static boolean is(HttpServletRequest req) {
        String servletPath = req.getServletPath();

        return is(servletPath);
    }

    public static boolean is(String url) {

        if(isStaticDirectory(url) || isStaticFile(url)){
            return true;
        }
        return false;
    }


}
